iT邦幫忙

2024 iThome 鐵人賽

DAY 30
0

回到初心者的初心

記得我剛開始寫 Python 時,滿懷熱情、廢寢忘食,從學著看懂別人的程式碼開始,到一行一行嘗試修改,再到後來能夠將自己的專案部署到伺服器上供人使用,以及自己完成一項專案開發,一步一步打磨出自己的技能。然而,當我決定踏入 Rust 的世界時,面對的是一道新的門檻,讓我感覺又再次成為了「初心者」。Rust 的學習歷程之於我而言,就像是一次轉生修練的過程,雖然有一些過去的程式開發記憶,但是抬頭一看,等級變回 lv 1。

即使寫了這 30 篇文章,我還是感覺自己只是在 Rust 這條路上剛起步。未來還有太多未知的領域需要探索,許多工具和技巧有待掌握,完賽在即,我想還是得回到最原始的問題上:「為什麼要學習 Rust?」,這個問題沒有搞清楚之前,就算已經有太多的學習資源可以入門,又與我何干呢?

學習的目的

「以終為始」-有清楚的最終目標,才開始學習的旅程,學習任何一門技術的起點都應該源自清楚的目標,對我來說,當初選擇學習 Rust 除了希望可以利用它的高效能,也因為其與 Python 語言具有部分共同性,這使得對我而言,作為一個 Python 開發者而言,是具有一定的吸引力的,這也就是為何開始寫此篇鐵人賽系列文的原因。

然而,學習的過程讓我意識到,技術學習的真正目的,不僅僅是要耐得住性子去看這些超級嚴謹的規則與抽象的概念,也是一方面也深刻體會到 Rust 如何能夠寫出高效的程式,讓我開始思考自己該如何能夠真正駕馭這項技術。

從需求出發

成功的專案,無論是使用哪種技術,都始於對需求的明確理解。Rust 的學習過程也是,我相信如果沒有一個明確的需求在背後支撐,來提供我們有參與實作的必要性或者強烈的企圖,那也可能會越學越迷惘,這也是為什麼本系列文的後段幾乎都在說明 web 應用開發的實際案例,因為這是最容易跨到用戶端的途徑,這也是我個人希望 Rust 可以帶來更高效能的主要應用範疇之一。

繼續 Rust 學習的話,或許找到一個讓自己有機會磨練這把劍的 side project 是個不錯的方法。但一個專案的開發何其容易呢,一旦開始就是代表一次完整的歷程所需要經歷的事情都會接踵而來,雖然這也是早晚都會需要面對的。

開發 -> 測試 -> 偵錯 -> 部署 -> 持續優化 -> ?

最好的學習地圖,其實就是走過一次專案開發歷程,一切都是從需求出發,經歷這個過程的目的,就是為了瞭解到實際開發的過程中會遇到哪些 意想不到的事情,假設以規劃一座城市這個需求為舉例,中間會遇到的過程跟學習Rust 專案開發過程會有哪些相似之處呢?

                              👷‍ ←--- 這是你,一個剛接手空地的城市規劃師,
                                          準備建設 Rust 城市
                              |
                              ▼
          🛠️ Rust 建設工地:起點
          | 「這裡一片荒蕪,但我們有無限的建設可能」
                              |
                              ▼
    📚 變數記憶體管理基礎設施 → 🔨 Python開發習慣拆除工程
    🧠「像鋪設下水道管道與電纜一樣,變數類別與記憶體管理必須小心...」  
    😅「Python 的建築材料在這裡不能用了...需要重新熟悉建築材料」
                              |
                              ▼
    🏗️ 所有權的地基 → 🧱 變數與模式匹配的結構設計
    😨「所有權就像地基,必須穩固不能亂來,否則會造成整體結構不穩」  
    🤔「`match` 為不同的目的規劃區域,設計建物或整體城市機能」
                              |
                              ▼
    ⚙️ 並行處理工廠建設 → 📦 泛型與特徵機制 → 🔧 函數應用與建置
    🧠「如果有大量生產材料的需求,建造並行工廠來應對吧!」   
    🧪「泛型與特徵像是選擇建材的過程,特定的建材才能使用在特定結構體」    
    🚪 「每棟大樓都需要反覆門窗安裝,這些都是基礎的工程」
                              |
                              ▼
    🔥 程式碼性能優化 → 🧪 程式碼結構測試 → 🚨 錯誤回報機制
    🏃「程式運作都仰賴穩定與及時的系統性運作」  
    😩「這座測試大橋的結構還不穩定,未來出事可就麻煩了...要提早解決!」  
    😵「程式或結構體中如果沒有及時發現問題,都不知道哪些設施現在需要維修」
                              |
                              ▼
    🚀 自動化部署 CI/CD → 🔍 生產環境測試 → 🔄 迭代與調整城市規劃
    🚀「城市更新需要與時俱進,要比之前更好,且避免施工錯誤發施衝突」  
    🎯「現場的實際施工品質如何呢?該如何檢測是否符合預期規劃效果?」  
    🤯「維持城市更新活化是必要的,如何規劃才方便未來擴張時更有效」
                              |
                              ▼
    🛠️ 巨集模組化設計圖 → 🧩 React 模組化與動態設計 → 🌐 FFI 跨語言開發
    🧠「設計圖模組化讓部分城區擴展規劃變得快捷方便」  
    🌫️「透過即時反應城市動態,更新城市樣貌與互動性」  
    🌍「外國旅客無法融入城市,必須透過翻譯使語言互相交流」
                              |
                              ▼
    🤖 透過 AI 智能輔助開發 → 📊 網路數據流量處理分流 → 🚗 RESTful API 高速公路
    🧠「智能系統的優化,讓城市規劃效率更高」  
    🚦「需要透過有效能的分流處理才能排除交通壅塞」  
    🚗「高速公路完美聯通了各地的交通網絡」
                              |
                              ▼
    🔬 全面測試 → 🏆 完成城市規劃與 Rust 學習歷程
    ⚡「需要預期城市中可能發生的各種情況與應對辦法」  
    💡「城市終於發展成熟,對城市規劃也有了充分的經驗」
                              |
                              ▼
                             🎉 成就 Rust 城市設計大師!

對我來說,如何在漫長的開發或學習歷程當下,找到"最有效"又能兼具"維持熱忱"的方法,是完成這段學習地圖過程中用來檢視的主要兩項指標。

雖說開發專案永遠都可以更好,技術也永遠都學不完,但是時間有限,不存在無限大的城市要給我們規劃,也沒有無限大的開發專案需要去參與實作的,所以只要知道如何在最有限的時間內實現心中的藍圖就行了,那麼回到最重要的問題-心中那個藍圖是長什麼樣子的。當然,這就要看我們自己的開發專案需求,或者是我們自己學習的初心是什麼了。

永遠保持初心

筆者自接觸程式語言至今約6年時間,從完全自學開始,在茫茫大海般的開發者知識庫中流淌,在這段過程中才驚訝地發現,開發者們的技術分享內容,在網路上就猶如一個挖不完的礦山,總有發現不完的寶藏。

到如今,為了全身心投入於鑽研程式語言技術的學習與實作,我選擇作為一名自由開發的軟體工程師,既使半路出家的我在開發習慣上仍存在有許多非專業或者半吊子的習慣與盲點,但我還是希望能夠拋開其他繁瑣的事情,讓自己沉浸在撰寫程式碼時的樂趣當中,這種感受從以前到現在也都還是一模一樣,我想這就是對我而言最重要的初心。

旅程才是帶來快樂的事物,而不是目的地。 
The journey's what brings us happiness, not the destination. 
                      -電影《深夜加油站遇見蘇格拉底》

我帶著初心出發,目的其實是為了在路途中持續感受它,這樣的目標讓我清楚地知道我為何選擇這個具有挑戰性與實用性的 Rust 來作為此次鐵人賽的主題與未來努力方向。這次的鐵人賽順利完賽了,感覺這充實的一個月也滿快就過去了。希望看到這裡的讀者也能夠好好享受自己的開發學習之旅。

我是Maso,如果有任何在系列文章中遇到的問題,歡迎與我反映或者交流討論,LINE ID: mastermaso,如果沒有意外的話,明年的鐵人賽再看有什麼主題來跟大家分享囉!


上一篇
[Day 29] Rust 學海無涯:紮穩馬步-總複習
系列文
從 Python 開發者的角度學習 Rust —— 從語法基礎到實戰應用30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言